package arithmetic.LeetCode;

/**
 * // https://leetcode-cn.com/problems/calculate-money-in-leetcode-bank/submissions/
 *
 * Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。
 *
 * 最开始，他在周一的时候存入 1 块钱。从周二到周日，他每天都比前一天多存入 1 块钱。在接下来每一个周一，他都会比 前一个周一 多存入 1 块钱。
 *
 * 给你 n ，请你返回在第 n 天结束的时候他在力扣银行总共存了多少块钱。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：n = 4
 * 输出：10
 * 解释：第 4 天后，总额为 1 + 2 + 3 + 4 = 10 。
 * 示例 2：
 *
 * 输入：n = 10
 * 输出：37
 * 解释：第 10 天后，总额为 (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4) = 37 。注意到第二个星期一，Hercy 存入 2 块钱。
 * 示例 3：
 *
 * 输入：n = 20
 * 输出：96
 * 解释：第 20 天后，总额为 (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4 + 5 + 6 + 7 + 8) + (3 + 4 + 5 + 6 + 7 + 8) = 96 。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/calculate-money-in-leetcode-bank
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @author jiangfeng on 2022/1/15
 */
public class LeetCodeBank {

    public static void main(String[] args) {
        Solution solution = new Solution();

        System.out.println(solution.totalMoney(175));
    }


}

class Solution {
    public int totalMoney(int n) {

        int yushu = n%7; //6
        int weeks = n/7; //2
        //int[] feibo = {0,1,3,6,10,15,21,28};
        if(weeks == 0){
            return cals(n);
        }

        if(weeks == 1){
            return cals(yushu) + yushu*weeks + 28*weeks ;
        }
        //int lastWeek = feibo[yushu-1] + weeks*yushu; 9
        //21+2*6 = 33
        // 56+ 7
        //int beforeTotal = 28*weeks + 7*feibo[weeks-1]
        //21+6*2+28*3
        // 最后一周的钱=
        // 最后一周之前周的钱=
        // 1000/7 =142
        return cals(yushu) + yushu*weeks + 28*weeks + 7*cals(weeks-1);
        // 88 return feibo[yushu-1] + yushu*weeks + 28*weeks + 7*feibo[weeks-2];
    }

    public int feibo2(int n){
        if(n<2){
            return 1;
        }
        if(n==2){
            return 3;
        }
        return feibo2(n-1)+n;
    }
    public int cals(int n ){
        return (n*(n+1))/2;
    }

}
